// 导入定义验证规则的包
// const joi = require("@hapi/joi");
const joi = require("joi");
/**
 * string()值必须是字符串
 * alphanum()值只能包含a-zA-ZO-9的字符串
 * min(length) 最小长度
 * max(length) 大长度
 * required() 值是必填项，不能为 undefined
 * pattern(正则表达式) 值必须符合正则表达式的规则
 */

// 在头部区域导入 bcrytjs后
// 既可使用

// 定义用户名和密码的验证规则
const username = joi.string().alphanum().min(1).max(10).required();
const password = joi
  .string()
  .pattern(/^[\S]{6,12}$/)
  .required();

// 定义id,nickname,emial的验证规则
const id = joi.number().integer().min(1).required();
const nickname = joi.string().required();
const email = joi.string().email().required();

// 核心验证思路: 旧密码与新密码，必须符合密码的验证规则，并且新密码不能与旧密码一致!
exports.update_Password_schema = {
  body: {
    // 使用password这个规则，验证req.body.oldPwd的值
    oldPwd: password,
    // 使用 joi.not(joi.ref('oldPwd'))concat(password) 规则，验证 reg.body,newPwd 的值
    // 1.joi.ref('oldPwd')表示newPwd的值必须和oldPwd的值保持一致
    // 2.joi.not(joi.ref('oldPwd'))表示newPwd的值不能等于oldPwd的值
    // 3. .concat()用于合并joi.not(joi.ref('oldPwd'))和password 这两条验证规则
    newPwd: joi.not(joi.ref("oldPwd")).concat(password),
  },
};

// 更换头像接口表单验证
// dataUrl()指的是如下格式的字符串的数据，
// dataUri把图片转为base64
// data:image/png:base64
const avatar = joi.string().dataUri().required();

// 分类表单数据验证
// 定义分类名称和分类别名的效验规则
const name = joi.string().required();
const alias = joi.string().alphanum().required();
//效验规则对象，添加分类
exports.add_cate_schema = {
  body: {
    name,
    alias,
  },
};

// 暴露并使用
exports.update_avatar_schema = {
  body: {
    avatar,
  },
};

// 定义验证注册和登录表单数据的规则对象
exports.reg_login_schema = {
  body: {
    username,
    password,
  },
};

// 更新用户的基本信息
exports.update_userinfo_schema = {
  body: {
    id,
    nickname,
    email,
  },
};
